

fn get_length(s:String) -> usize{
    println!("函数获取的参数是:{}",s);
    s.len()
}


fn main() {


    // 所有权转移形式一
    let s1  = String::from("hello");
    println!("{}",s1);
    // let s2 = s1;   // 发生所有权转移借用,s1被销毁
    // println!("{}",s1);

    // 如果还想继续使用s1,则必须进行深拷贝,而非所有权转移
    let s2 = s1.clone();
    println!("{}",s1);


    
    // 所有权转移形式二
    // let l =  get_length(s1);  // value moved here, get_length函数结束后, s1就被销毁了
    let l =  get_length(s1.clone());   // 传入深拷贝的值可以解决借用问题
    println!("{}",s1);   
    println!("return value:{}",l);   // return value:5
    
}
